home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swags_z.zip / SCREEN.SWG / 0083_Sorta good WriteString.pas < prev   
Pascal/Delphi Source File  |  1995-02-28  |  3KB  |  76 lines

  1.  
  2. Procedure WriteS (DispStr : String; X,Y,Colr : Byte);
  3.  
  4.                (* DispStr = String to display on screen
  5.                   X,Y     = Coordinates to being writing
  6.                   Colr    = Color attribute
  7.                *)
  8.  
  9.   (* This is a simple procedure to directly write a string to the screen,
  10.      accounting for imbedded color codes.  These color codes are identified
  11.      by a \ followed by a two or three digit number representing the color
  12.      desired.  All subsequent output of the string will be given the new
  13.      color until otherwise declared.  The string '\M' is also recognized as
  14.      a carriage return, where the string will be continued on the next line,
  15.      aligned with the above line.  No values are returned.
  16.  
  17.      It's fairly fast, and it does the job, but I know that it could use a
  18.      lot of tweaking, so if anybody does improve on it, please give me an
  19.      updated copy.
  20.  
  21.      ** NOTE **  The screen address is kept in the variable VidSeg.  You can
  22.                  either go through the procedure and replace it with a constant
  23.                  screen address, or assign the variable VidSeg in your program.
  24.   *)
  25.  
  26.   (* Standard disclaimer: I'm not liable for anything this procedure does
  27.                           outside the original purpose of the procedure.  If
  28.                           something bad happens, let me know, but that's all
  29.                           I can do.
  30.   *)
  31.  
  32. Var
  33.    Loc, TmpInt, OldX                    : Integer;
  34.    TmpStr                               : String[3];
  35.  
  36. Begin
  37.      OldX := X;
  38.      Loc := ((X-1)*2)+((Y-1)*160);
  39.      Loop := 1;
  40.      While Loop <= Length (DispStr) Do
  41.      Begin
  42.           TmpStr := '';
  43.           If (DispStr[Loop] = '\') And (DispStr[Loop+1] <> '\') Then
  44.           Begin
  45.                Inc (Loop);
  46.                If DispStr[Loop] In ['0'..'9'] Then
  47.                Begin
  48.                     While (DispStr[Loop] In ['0'..'9']) And
  49.                           (Length (TmpStr) < 3) Do
  50.                     Begin
  51.                          TmpStr := TmpStr + DispStr[Loop];
  52.                          Inc (Loop);
  53.                     End;
  54.                     Val (TmpStr,Colr,TmpInt);
  55.                     Colr := CheckColor (Colr);
  56.                End
  57.                Else
  58.                If UpCase (DispStr[Loop]) = 'M' Then
  59.                Begin
  60.                     Inc (Y);
  61.                     X := OldX;
  62.                     Loc := ((X-1)*2)+((Y-1)*160);
  63.                End;
  64.           End
  65.           Else
  66.           Begin
  67.                If DispStr[Loop] = '\' Then
  68.                   Delete (DispStr,Loop,1);
  69.                Mem[VidSeg:Loc] := Ord (DispStr[Loop]);
  70.                Mem[VidSeg:Loc+1] := Colr;
  71.                Inc (Loc,2);
  72.                Inc (Loop);
  73.           End;
  74.      End;
  75. End;
  76.